package com.tanhua.server.controller;

import com.tanhua.autoconfig.templates.SmsTemplate;
import com.tanhua.model.db.User;
import com.tanhua.server.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * 用户登录
 */
@RestController
@RequestMapping("/user")
public class LoginController {

    @Autowired
    private SmsTemplate template;

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Autowired
    private UserService userService;

    /**
     * 根据手机号码查询用户
     *   controller:
     *     1、获取请求参数
     *     2、业务（业务逻辑，特别多）
     *        业务层，调用dubbo提供者，获取数据
     *     3、响应数据
     */
    @GetMapping("/{mobile}")
    public User findByMobile(@PathVariable("mobile") String mobile) {
        //1、获取请求参数
        //2、业务（业务逻辑，特别多），调用service
        User user = userService.findByMobile(mobile);
        //3、响应数据
        return user;
    }

    /**
     * 登录第一步：发送验证码
     * 请求地址：POST    /login
     * 请求参数：Body类型参数
     *      {
     *          "phone":"13800138000"
     *      }
     *      参数多：抽取请求的实体类
     *      参数少：Map集合（key就是json的key）
     * 返回值：
     *   void
     */
    @PostMapping("/login")
    public ResponseEntity login(@RequestBody Map map) {
        String mobile = map.get("phone").toString();
        //1、生成验证码  123456
        //String code = RandomUtil.randomNumbers(6);//参数：验证码的位数
        String code = "123456";
        //2、给手机发送验证码
        //template.sendSms(mobile,code);
        //3、为了登录校验，验证码需要存储(redis)
        redisTemplate.opsForValue().set("CODE:"+mobile,code,5, TimeUnit.MINUTES);
        return ResponseEntity.ok(null); //指定相应数据
    }

    /**
     * 登录第二步：根据手机号/验证码完成登录与注册
     *    请求地址：POST     /loginVerification
     *    Body参数：phone，verificationCode
     *    返回值：
     *      {
     *          "token":"xxxx",
     *          "isNew":true
     *      }
     */
    @PostMapping("/loginVerification")
    public ResponseEntity loginVerification(@RequestBody Map map) {
        //1、获取请求参数
        String mobile = map.get("phone").toString();
        String code = map.get("verificationCode").toString();
        //2、调用service完成登录业务
        Map retMap = userService.loginVerification(mobile,code);
        //3、构造返回
        return ResponseEntity.ok(retMap);
    }

}
